iT邦幫忙

2026 iThome 鐵人賽

DAY 22
0
自我挑戰組

無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務系列 第 22 篇

情境 1:智慧倒車雷達——超音波測距 + 蜂鳴器不同頻率嗶嗶聲

  • 分享至 

  • xImage
  •  

今日目標
今天我們要打造一個在日常汽車中極為常見的實用系統——智慧倒車雷達,透過超音波感測器來精準衡量距離,結合無源蜂鳴器產生非阻塞室的警示音。距離離障礙物越近,蜂鳴器發出聲音的頻率就會越高,當進入極危險距離時更會發出長鳴警報。

程式碼
import time
from machine import Pin,PWM

trig=Pin(5,Pin.OUT)
echo=Pin(18,Pin.IN)
buzzer_pwm=PWM(Pin(19),freq=2000,duty=0)

def get_distance():
trig.value(0)
time.sleep_us(2)
trig.value(1)
time.sleep_us(10)
trig.value(0)

pulse_time=machine.time_pulse_us(echo,1,30000)
if pulse_time<0:
    return 999.0
    
distance=(pluse_time*0.0343)/2
return distance

def beep(duration_ms):
buzzer_pwm.duty(512)
time.sleep_ms(duration_ms)
buzzer_pwm.duty(0)

print("===智慧倒車雷達警報系統啟動===")

last_beep_time=0
while True:
dist=get_distance()
now=time.ticks_ms()

 print(f"目前障礙物距離:{dist:.1f}cm")
 
 if dist>30:
     buzzer_pwm.duty(0)
     time.sleep_ms(200)
     
 elif 15<dist<=30:
     if time.ticks_diff(now,last_beep_time)>=500:
         beep(60)
         last_beep_time=now
     time.sleep_ms(50)
     
 elif 7<dist<=15:
     if time.ticks_diff(now,last_beep_time)>=150:
         beep(40)
         last_beep_time=now
     time.sleep_ms(30)
     
 else:
     buzzer_pwm.duty(512)
     time.sleep_ms(100)
     

心得
今天我們打造了一個完整的實用物聯網情境,透過時間差距演算法(time.ticks_diff),我們不需要寫笨重的time.sleep()就能實現非阻賽式的不同頻率嗶嗶聲,讓超音波測距與警報聲能流暢並行運作。


上一篇
使用 PWM 控制 RGB LED 調出不同顏色
系列文
無硬體也能玩物聯網!使用 Wokwi 模擬器與 MicroPython 打造 30 天 ESP32 實務 共 22 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言